package com.fk.his.repository.impl;

import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.fk.his.convertor.BizNoRuleConvertor;
import com.fk.his.domain.model.aggregates.BizNoRule;
import com.fk.his.domain.repository.IBizNoRuleRepository;
import com.fk.his.mapper.IBizNoRuleMapper;
import com.fk.his.po.BizNoRulePO;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.Objects;

/**
 * <p>
 * 业务编码规则仓储层实现
 * <p>
 * 示例代码
 * <pre>
 * </pre/>
 *
 * @author InHome
 * @version BME V100R001 2023/03/27
 * @since BME V100R001C40B104
 */
@Repository
public class BizNoRuleRepository implements IBizNoRuleRepository {

    @Resource
    private IBizNoRuleMapper iBizNoRuleMapper;

    @Override
    public boolean save(BizNoRule bizNoRule) {
        BizNoRulePO bizNoRulePo = BizNoRuleConvertor.toPO(bizNoRule);
        if (Objects.isNull(bizNoRulePo.getId())) {
          /*  if (Objects.nonNull(bizNoRule.getId())) {
                // 新增记录时没有值，更新时有值
                bizNoRulePo.setId(bizNoRule.getId());
            }*/
            //如果是修改领域模型上id应该是DTO传进来的,意思是领域创建的时候就存在,如果是新增那么就需要后面去生成,那就需要单独设置id，但是又建议领域模型只开放get方法不开放set方法，那id怎么设置进去？
            bizNoRulePo.setId(IdUtil.getSnowflake().nextId());
            return iBizNoRuleMapper.insert(bizNoRulePo) > 0;
        }

        return iBizNoRuleMapper.updateById(bizNoRulePo)>0;
    }

    @Override
    public BizNoRule findById(Long id) {
        Assert.isNull(id, "id 不能为空.", id);
        BizNoRulePO bizNoRulePo = iBizNoRuleMapper.selectById(id);
        Assert.isNull(bizNoRulePo, "根据id查询编码规则不存在.");
        return BizNoRuleConvertor.toDomainObject(bizNoRulePo);
    }
}